package com.xupt.top;

import java.util.Arrays;

/**
 * @author zhaoxin
 * @title: FindUnsortedSubarray
 * @projectName LeetCode
 * @description: 581. 最短无序连续子数组
 * @date 2019/12/10 10:05
 */
public class FindUnsortedSubarray {

    /**
     * 给定一个整数数组，你需要寻找一个连续的子数组，如果对这个子数组进行升序排序，那么整个数组都会变为升序排序。
     *
     * 你找到的子数组应是最短的，请输出它的长度。
     *
     * 示例 1:
     *
     * 输入: [2, 6, 4, 8, 10, 9, 15]
     * 输出: 5
     * 解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序，那么整个表都会变为升序排序。
     * 说明 :
     *
     * 输入的数组长度范围在 [1, 10,000]。
     * 输入的数组可能包含重复元素 ，所以升序的意思是<=。
     *
     * @param nums
     * @return
     */
    public int findUnsortedSubarray(int[] nums) {
        // copy出一个新数组
        int [] tempNums = nums.clone();
        // 对新数组排序
        Arrays.sort(tempNums);
        int start = nums.length;
        int end = 0;
        // 找出新数组和原数组不匹配的start元素和end元素位置
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != tempNums[i]){
                start = Math.min(start, i);
                end = Math.max(end, i);
            }
        }

        return (end - start) > 0 ?  (end - start + 1) : 0;
    }
}
